#e[Package]
#Title["Maiden's Banquet -B̒e- ver1.20a"]
#Text["Maiden's Banquet ver1.20a"]
#System["./system/System.txt"]
#Player["./player/Marisa/Marisa.txt","./player/Reimu/Reimu.txt"]

#include".\lib/BossCommon/SpellList.txt"

let PlayerCharacter;
let SoundFlag=1;
let StageMusicFlag=1;
let StageMusicStopFlag=0;
let DemoFlag=0;

let SpellCardInfo_Text=[];
let SpellCardInfo_Get=[];
let SpellCardInfo_Challenge=[];

@Initialize
{
	T_Main;
}


@MainLoop
{
	yield;
}

@Finalize
{
}


task T_Main
{
	yield;
	if(LoadCommonDataAreaA1("SPELL_RECORD"))
	{
		LoadCommonDataAreaA1("TUNING");
	}
	else
	{
		let Spell_C_Array=[];
		let Spell_G_Array=[];
		let Spell_Score_Array=[];
		let Spell_First_Array=[];
		let Spell_Early_Array=[];
		loop(100)
		{
			Spell_C_Array=Spell_C_Array~[0];
			Spell_G_Array=Spell_G_Array~[0];
			Spell_Score_Array=Spell_Score_Array~[0];
			Spell_First_Array=Spell_First_Array~[0];
			Spell_Early_Array=Spell_Early_Array~[100000];
		}
		CreateCommonDataArea("SPELL_RECORD");
		SetAreaCommonData("SPELL_RECORD","Reimu_Challenge",Spell_C_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Get",Spell_G_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Score",Spell_Score_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_First",Spell_First_Array);
		SetAreaCommonData("SPELL_RECORD","Reimu_Early",Spell_Early_Array);

		SetAreaCommonData("SPELL_RECORD","Marisa_Challenge",Spell_C_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Get",Spell_G_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Score",Spell_Score_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_First",Spell_First_Array);
		SetAreaCommonData("SPELL_RECORD","Marisa_Early",Spell_Early_Array);

		CreateCommonDataArea("TUNING");
		SetAreaCommonData("TUNING","BGM",1);
		SetAreaCommonData("TUNING","PlayerCharacter",0);
		SetAreaCommonData("TUNING","SelectIndex",0);
		SetAreaCommonData("TUNING","SelectPageIndex",0);
		SetAreaCommonData("TUNING","PlayerName","NEMO");
	}
	yield;
//	GetLoadFreePlayerScriptList;
	TTitleScene();
	T_Sound;
//	DrawTitleEffect;
//	DrawTitleFrame;
//	ContinueSystem;
}


//----------------------------------------------------
// ^CgV[
//----------------------------------------------------

task T_Sound
{
	let objMusic=ObjSound_Create;
	ObjSound_Load(objMusic,GetCurrentScriptDirectory~"bgm/menu.ogg");
	ObjSound_SetLoopEnable(objMusic,true);
//	ObjSound_SetLoopTime(objMusic,46.439,107.369);
	if(SoundFlag==1)
	{
	ObjSound_Play(objMusic);
	if(GetAreaCommonData("TUNING","BGM",1)==1)
	{
	ObjSound_SetVolumeRate(objMusic,80);
	}
	else
	{
	ObjSound_SetVolumeRate(objMusic,0);
	}
	while(SoundFlag){yield;}
	ObjSound_SetFade(objMusic,-40);
	loop(60){yield;}
	}
	Obj_Delete(objMusic);
}

task TTitleScene
{
	SpellCardInfo_Text=[];
	SpellCardInfo_Get=[];
	SpellCardInfo_Challenge=[];
	SoundFlag=1;
	StageMusicFlag=0;
	PlayerCharacter = GetAreaCommonData("TUNING","PlayerCharacter",1);//vC[
	//^CgV[ItO
	let bEndTitleScene = false;

	//^CgpXݒ
	let dir = GetCurrentScriptDirectory();
	let pathTitle = dir ~ "system/img/Title.png";

	let objTitleImage = ObjPrim_Create(OBJ_SPRITE_2D); //2DXvCgIuWFNg
	Obj_SetRenderPriorityI(objTitleImage, 20); //`Dxݒ
	ObjPrim_SetTexture(objTitleImage, pathTitle); //eNX`ݒ
	ObjSprite2D_SetSourceRect(objTitleImage, 0, 0, 640, 480);
	ObjSprite2D_SetDestRect(objTitleImage, 0, 0, 640, 480);

	//^Cg
	let objTitleText = ObjText_Create();
	ObjText_SetText(objTitleText, "No @SpellCard  @@@@@@@@@@@Difficult        Memory");
	ObjText_SetFontSize(objTitleText, 14+4);
	ObjText_SetFontBold(objTitleText, true);
	ObjText_SetFontColorTop(objTitleText, 255, 255, 255);
	ObjText_SetFontColorBottom(objTitleText, 160, 160, 255);

//	ObjText_SetFontBorderType(objTitleText, BORDER_FULL);
	ObjText_SetFontBorderType(objTitleText, BORDER_NONE);
	ObjText_SetFontBorderColor(objTitleText,255, 255, 255);
	ObjText_SetFontBorderWidth(objTitleText, 2*0);
	Obj_SetRenderPriorityI(objTitleText, 30);
	ObjRender_SetX(objTitleText, 14);
	ObjRender_SetY(objTitleText, 14);

	ObjText_SetFontType(objTitleText,"lr ");

	//j[
	let INDEX_START = 0;
	let INDEX_REPLAY = 1;
	let INDEX_QUIT = 2;
	let selectIndex = GetAreaCommonData("TUNING","SelectIndex",0);//Iʒu
	let selectPageIndex=GetAreaCommonData("TUNING","SelectPageIndex",0);//Iʒu
	let MaxselectPageIndex=0;
	task TMenuItem
	{
		function CreateTextObject(let mx, let my, let text)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);

		//	ObjText_SetFontBorderType(obj, BORDER_FULL);
			ObjText_SetFontBorderType(obj, BORDER_NONE);
			ObjText_SetFontBorderColor(obj,255, 255, 255);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 72);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);

			ObjText_SetFontType(obj,"lr ");
			Obj_SetValue(obj,"BaseAlpha",255);
			return obj;
		}

	//	mx, my+(iText%12)*25
		let mx = 14;
		let my = 14+25;
		let objTextArray=[];
		ascent(i in 0..24)
		{
			objTextArray = objTextArray~[CreateTextObject(mx, my+i%12*25, "")];
		}
		let AlphaRate=1;
		AlphaCont;

		let OldPage=selectPageIndex;
		let dir=1;
		while(!bEndTitleScene)
		{
			ascent(i in 0..12)
			{
				if(length(SpellCardInfo_Text)>i+selectPageIndex*12)
				{
				ObjText_SetText(objTextArray[i], SpellCardInfo_Text[i+selectPageIndex*12]);
				if(SpellCardInfo_Challenge[i+selectPageIndex*12]>=1){
				if(SpellCardInfo_Get[i+selectPageIndex*12]>=1){ObjText_SetFontColorBottom(objTextArray[i], 128, 255, 192);}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 64, 64);}
				}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 255, 255);}
				}
				else
				{
				ObjText_SetText(objTextArray[i], "");
				}
			}
			while(OldPage==selectPageIndex)
			{
				if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
				{
					dir=1;
				}
				if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
				{
					dir=-1;
				}
				if(bEndTitleScene){break;}
				yield;
			}
			if(bEndTitleScene){break;}

			ascent(i in 0..12)
			{
				Obj_SetValue(objTextArray[i],"BaseAlpha",0);
				ObjRender_SetX(objTextArray[i], 14+100*dir);
				ObjRender_SetAlpha(objTextArray[i],0);
			}
			ascent(i in 12..24)
			{
				Obj_SetValue(objTextArray[i],"BaseAlpha",255);
				ObjRender_SetX(objTextArray[i], 14);
				ObjRender_SetAlpha(objTextArray[i],255);
				if(selectIndex%12==i)
				{
					ObjRender_SetAlpha(objTextArray[i],Obj_GetValue(objTextArray[i],"BaseAlpha"));
				}
				else
				{
					ObjRender_SetAlpha(objTextArray[i],Obj_GetValue(objTextArray[i],"BaseAlpha")*0.6);
				}
			}
			ascent(i in 0..12)
			{
				if(length(SpellCardInfo_Text)>i+selectPageIndex*12)
				{
				ObjText_SetText(objTextArray[i], SpellCardInfo_Text[i+selectPageIndex*12]);
				if(SpellCardInfo_Challenge[i+selectPageIndex*12]>=1){
				if(SpellCardInfo_Get[i+selectPageIndex*12]>=1){ObjText_SetFontColorBottom(objTextArray[i], 128, 255, 192);}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 64, 64);}
				}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 255, 255);}
				}
				else
				{
				ObjText_SetText(objTextArray[i], "");
				}
			}
			ascent(i in 12..24)
			{
				if(length(SpellCardInfo_Text)>i+OldPage*12-12)
				{
				ObjText_SetText(objTextArray[i], SpellCardInfo_Text[i+OldPage*12-12]);
				if(SpellCardInfo_Challenge[i+OldPage*12-12]>=1){
				if(SpellCardInfo_Get[i+OldPage*12-12]>=1){ObjText_SetFontColorBottom(objTextArray[i], 128, 255, 192);}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 64, 64);}
				}
				else{ObjText_SetFontColorBottom(objTextArray[i], 255, 255, 255);}
				}
				else
				{
				ObjText_SetText(objTextArray[i], "");
				}
			}
			OldPage=selectPageIndex;
			let AlphaRate=0;
			let AlphaRate2=1;
			let Time=10;

			loop(Time)
			{
				AlphaRate+=1/Time;
				ascent(i in 0..12)
				{
				ObjRender_SetX(objTextArray[i], ObjRender_GetX(objTextArray[i])-100/Time*dir);
				Obj_SetValue(objTextArray[i],"BaseAlpha",AlphaRate*255);
				}
				AlphaRate2-=1/Time;
				ascent(i in 12..24)
				{
				ObjRender_SetX(objTextArray[i], ObjRender_GetX(objTextArray[i])-100/Time*dir);
				Obj_SetValue(objTextArray[i],"BaseAlpha",AlphaRate2*255);
				}
				yield;
			}
		}

		ascent(i in 0..24)
		{
			Obj_Delete(objTextArray[i]);
		}

		task AlphaCont
		{
			while(!bEndTitleScene)
			{
				ascent(i in 0..24)
				{
				if(selectIndex%12==i)
				{
					ObjRender_SetAlpha(objTextArray[i],Obj_GetValue(objTextArray[i],"BaseAlpha"));
				}
				else
				{
					ObjRender_SetAlpha(objTextArray[i],Obj_GetValue(objTextArray[i],"BaseAlpha")*0.6);
				}
				}
				yield;
			}	
		}
	}
	yield;

	//j[zu
	let mx = 14;
	let my = 14+25;
	let texts = ["Start", "Replay", "Quit"];
	let SpellCardSetting=[
	["uubNAEgLms[v","","[~A"],
	["utFC^t[WAv","","`m"],
	["ugbL[Obhv","","d"],
	["uz{v","","[zCg"],
	["uuCh[Cv","","~XeBAE[C"],
	["uVnv","","˖ہ@"],
	["uAJ[CXgv","","с@"],
	["u~v","","s@HXq"],
	["u\EXeB[[v","",""],
	["uAEhtAv","","GH@"],
	["uJ[h[rbgv","","@Ă"],
	["uCNOiA[~VFCNjv","","ED܉؉@ECio"],

	["ue_[nVlCVv","","fBXER["],
	["utFjbNXetv","","@g"],
	["uXy[XC[^[v","","\Z@"],
	["uX^[_XgeCv","","X^[Tt@CA"],
	["u[fBG[Vv","","i`Ch"],
	["u\[CY[U[v","","Tj[~N"],
	["u~XeB[Ov","","p`[Em[bW"],
	["ufCW[N[[v","","@H"],
	["u鮓jMv","","鮁@d"],
	["uh[~OWGv","","HR@P"],
	["ugDSBVe̍gv","","~AEXJ[bg"],
	["uCfbZgGuCXv","","th[EXJ[bg"],

	["uSӉ΋ʁv","","ɐ@"],
	["uOr̜frv","","ˁ@"],
	["uԂ̗ev","","b@ʂ"],
	["uԒe]Ev","","_@"],
	["ul`ov","","AXE}[KgCh"],
	["uق̓Vv","","i]@ߋ"],
	["ug˓V@v","",""],
	["u̐_ρv","","_@"],
	["uqf̐_v","","J@c"],
	["uӋCՓV̌Mv","","ߖ@Vq"],
	["uI[EF[uv","",""],
	["uv","","Bc@"],

	["uVjӋ|v","","Ӂ@i"],
	["uP𐳂v","","lGfPE}UihD"],
	["uGXJgXI[fB[v","","_Y"],
	["uA܁v","","g@"],
	["uAXRrigAv","","~[Y"],
	["uẌÂv","","[~A"],
	["uVv[XvOv","","[zCg"],
	["uMkK̐[v","",""],
	["uu[J[oNv","","HR@P"],
	["u}CMNV[v","",""]
	];

	texts=[];
	ascent(i in 0..length(SpellCardSetting))
	{
		SetSpellCardNumber(SpellCardSetting[i][0]);
		let C_Array=[];
		alternative(PlayerCharacter)
		case(0){C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);}
		case(1){C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);}

		if(C_Array[GetCommonData("SpellNumber",0)]>=1)
		{
		texts=texts~[SpellCardSetting[i][0]];
		}
		else
		{
		texts=texts~["ҕW"];
		}
	}

	ascent(i in 1..length(texts)+1)
	{
		SetSpellCardNumber(SpellCardSetting[i-1][0]);
		let AddStr;
		if(i<10)
		{
			AddStr="00"~IntToString(i);
		}
		else if(i<100)
		{
			AddStr="0"~IntToString(i);
		}
		else
		{
			AddStr=IntToString(i);
		}
		AddStr=AddStr~" ";

		texts[i-1]=AddStr~texts[i-1];

		while(length(texts[i-1])<38)
		{
			texts[i-1]=texts[i-1]~"@";
		}


		texts[i-1]=texts[i-1]~SpellCardSetting[i-1][1];


		while(length(texts[i-1])<56)
		{
			texts[i-1]=texts[i-1]~"@";
		}

		let G_Array=[];
		alternative(PlayerCharacter)
		case(0){G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]);}
		case(1){G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]);}

		AddStr=IntToString(G_Array[GetCommonData("SpellNumber",0)]);
		texts[i-1]=texts[i-1]~AddStr;

		AddStr=" / ";
		texts[i-1]=texts[i-1]~AddStr;
/*
		while(length(texts[i-1])<68)
		{
			texts[i-1]=texts[i-1]~"@";
		}
*/
		let C_Array=[];
		alternative(PlayerCharacter)
		case(0){C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);}
		case(1){C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);}

		AddStr=IntToString(C_Array[GetCommonData("SpellNumber",0)]);
		texts[i-1]=texts[i-1]~AddStr;
	}

	var countMenu = 12;
	ascent(var iText in 0 .. length(texts))
	{
		SetSpellCardNumber(SpellCardSetting[iText][0]);

		let C_Array=[];
		alternative(PlayerCharacter)
		case(0){C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);}
		case(1){C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);}
		let G_Array=[];
		alternative(PlayerCharacter)
		case(0){G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]);}
		case(1){G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]);}

	//	TMenuItem(iText, mx, my+(iText%12)*25, texts[iText],G_Array[GetCommonData("SpellNumber",0)],C_Array[GetCommonData("SpellNumber",0)]);
		SpellCardInfo_Text=SpellCardInfo_Text~[texts[iText]];
		SpellCardInfo_Get=SpellCardInfo_Get~[G_Array[GetCommonData("SpellNumber",0)]];
		SpellCardInfo_Challenge=SpellCardInfo_Challenge~[C_Array[GetCommonData("SpellNumber",0)]];
	}
	TMenuItem;

	//L[ԂZbg܂őҋ@
	while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}

	SelectEffect;
	Explain;

	//j[I
	let frameKeyHold = 0;//L[ςȂt[
	MaxselectPageIndex=floor(length(SpellCardSetting)/12)+1;
	if(length(SpellCardSetting)%12==0){MaxselectPageIndex-=1;}
	let FreeCount=0;
	DemoFlag=0;
	let CanselHoldCount=0;
	loop
	{
		SetAreaCommonData("TUNING","SelectIndex",selectIndex);
		SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex);
		SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter);

		//
		if(GetVirtualKeyState(VK_OK) == KEY_PUSH)
		{
			SetSpellCardNumber(SpellCardSetting[selectIndex+selectPageIndex*12][0]);
			SetCommonData("SpellCardNo",GetCommonData("SpellNumber",0));
			SetCommonData("SpellCardID",selectIndex+1+selectPageIndex*12);
			SetCommonData("PlayerCharacter",PlayerCharacter);

			SetCommonData("Ori_SpellCardBonus",length(SpellCardSetting[selectIndex+selectPageIndex*12][1])/2*50000+100000);

			TStageScene("");
/*
			if(selectIndex == INDEX_START)
			{
				SetCommonData("SpellCardNo",selectIndex+1);
				TStageScene("");
			}
			else if(selectIndex == INDEX_REPLAY)
			{
				TReplaySelectScene();
			}
			else if(selectIndex == INDEX_QUIT)
			{
				ClosePackage();
			}
*/
			break;
		}

		//J[\ړ
		if(GetVirtualKeyState(VK_UP) == KEY_PUSH)
		{
			selectIndex--;
		}
		else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH)
		{
			selectIndex++;
		}
		else if(GetVirtualKeyState(VK_UP) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectIndex--;
			}
		}
		else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectIndex++;
			}
		}

		else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH)
		{
			selectPageIndex--;
			if(selectPageIndex<0)
			{
				selectPageIndex=MaxselectPageIndex-1;
			}
		}
		else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH)
		{
			selectPageIndex++;
			if(selectPageIndex>=MaxselectPageIndex)
			{
				selectPageIndex=0;
			}
		}
		else if(GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectPageIndex--;
				if(selectPageIndex<0)
				{
					selectPageIndex=MaxselectPageIndex-1;
				}
			}
		}
		else if(GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0)))
			{
				selectPageIndex++;
				if(selectPageIndex>=MaxselectPageIndex)
				{
					selectPageIndex=0;
				}
			}
		}
		else
		{
			frameKeyHold = 0;
		}

		if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH)
		{
			PlayerCharacter++;
			PlayerCharacter=PlayerCharacter%2;
			SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter);

			bEndTitleScene = true;
			yield;
			TTitleScene;
			break;

		}

		if(GetVirtualKeyState(VK_USER1) == KEY_PUSH)
		{
			yield;
			TReplaySelectScene();
			break;
		}

		if(selectIndex < 0) 
		{
			if(selectPageIndex==MaxselectPageIndex-1 && length(SpellCardSetting)%countMenu!=0)
			{
			selectIndex = length(SpellCardSetting)%countMenu-1;
			}
			else
			{
			selectIndex = countMenu - 1;
			}
		}
		else
		{
			if(selectPageIndex==MaxselectPageIndex-1 && length(SpellCardSetting)%countMenu!=0)
			{
				if(selectIndex > length(SpellCardSetting)%countMenu-1)
				{
					selectIndex = 0;
				}
			}
			selectIndex %= countMenu;
		}

		if(GetVirtualKeyState(VK_LEFT)==KEY_FREE
		&&GetVirtualKeyState(VK_RIGHT)==KEY_FREE
		&&GetVirtualKeyState(VK_UP)==KEY_FREE
		&&GetVirtualKeyState(VK_DOWN)==KEY_FREE
		&&GetVirtualKeyState(VK_PAUSE)==KEY_FREE
		)
		{
			FreeCount+=1;
			if(FreeCount==1800)
			{
				yield;
				DemoScene;
				SetAreaCommonData("TUNING","DemoCount",GetAreaCommonData("TUNING","DemoCount",0)+1);
				break;
			}
		}
		else{FreeCount=0;}

		if(GetVirtualKeyState(VK_SPELL) == KEY_HOLD)
		{
			CanselHoldCount+=1;
			if(CanselHoldCount>=60){ClosePackage();}
		}
		else
		{
			CanselHoldCount=0;
		}
		yield;
	}

	bEndTitleScene = true;
	Obj_Delete(objTitleImage);
	Obj_Delete(objTitleText);

	task SelectEffect
	{
		let x=0;
		let y=0;
		while(!bEndTitleScene)
		{
			y=39+25*selectIndex;
		//	Light(rand(0,640),y+rand(0,16),rand(1,3),180+rand(-5,5));
			Light(rand(0,640),y+rand(15,16),rand(1,2)/3,270+rand(-5,5));
			Light(rand(0,640),y+rand(1,0),rand(1,2)/3,90+rand(-5,5));
			yield;
		}

		task Band
		{

		}

		task Light(X,Y,speed,angle)
		{
		let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
		ObjPrim_SetTexture(obj, GetCurrentScriptDirectory~"img/effect/star.png");
		ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
		ObjPrim_SetVertexCount(obj, 4);
		ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
		ObjRender_SetAngleZ(obj,0);

		ObjPrim_SetVertexPosition(obj, 0, -16, -16, -0);
		ObjPrim_SetVertexPosition(obj, 1, -16, 16, -0);
		ObjPrim_SetVertexPosition(obj, 2, 16, -16, 0);
		ObjPrim_SetVertexPosition(obj, 3, 16,16, 0);

		ObjPrim_SetVertexUVT(obj, 0, 0, 0);
		ObjPrim_SetVertexUVT(obj, 1, 0, 32);
		ObjPrim_SetVertexUVT(obj, 2, 32, 0);
		ObjPrim_SetVertexUVT(obj, 3, 32, 32);
		ObjRender_SetPosition(obj,X,Y,0);

		let scale=0.5;
		let Alpha=180;
		let Zangle=0;
		let ZanglePlus=rand(-5,5);

		loop(30)
		{
			scale-=0.5/30;
			Zangle+=ZanglePlus;
			ObjRender_SetPosition(obj,ObjRender_GetX(obj)+speed*cos(angle),ObjRender_GetY(obj)+speed*sin(angle),0);
			ObjRender_SetScaleXYZ(obj,scale,scale,scale);
			ObjRender_SetAngleZ(obj,Zangle);
			ObjRender_SetColor(obj,Alpha*0.75,Alpha*0.75,Alpha);
			yield;
		}
		Obj_Delete(obj);
		}
	}

	task Explain
	{
		UnderExplain;

		function CreateTextObject(let mx, let my, let text)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);
			ObjText_SetFontColorBottom(obj, 255, 160, 255);
			if(mx==504 || mx==584)
			{
			ObjText_SetFontColorBottom(obj, 160, 160, 255);
			}
			if(my==440)
			{
			ObjText_SetFontColorBottom(obj, 255, 128, 128);
			}
		//	ObjText_SetFontBorderType(obj, BORDER_FULL);
			ObjText_SetFontBorderType(obj, BORDER_NONE);
			ObjText_SetFontBorderColor(obj,255, 255, 255);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 72);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);

			ObjText_SetFontType(obj,"lr ");

			return obj;
		}

		let objText = CreateTextObject(14, 352,"gpҁF@"~"Unknown");
		let objText2 = CreateTextObject(14, 352+20, "擾퐔@"~"N/A");
		let objText3 = CreateTextObject(14, 352+20*2, "ōXRA@@"~"N/A");
		let objText4 = CreateTextObject(14, 352+20*3, "ŒZjԁ@"~"N/A");

		let objText5 = CreateTextObject(504, 352, "Page@"~"1 / "~IntToString(MaxselectPageIndex));
		let objText6 = CreateTextObject(356, 352+20*1, "擾@@@"~"18/42");
		let objText7 = CreateTextObject(356, 352+20*2, "ōXRA@");
		let objText8 = CreateTextObject(356, 352+20*3, "jԁ@@@"~"N/A");

		let objText9 = CreateTextObject(14, 352+20*4+8, "Player@"~"@얲");

		let objText10 = CreateTextObject(584, 458,"");

		while(!bEndTitleScene)
		{
			SetSpellCardNumber(SpellCardSetting[selectIndex+selectPageIndex*12][0]);

			let C_Array=[];
			alternative(PlayerCharacter)
			case(0){C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]);}
			case(1){C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]);}
			let G_Array=[];
			alternative(PlayerCharacter)
			case(0){G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]);}
			case(1){G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]);}
			let S_Array=[];
			alternative(PlayerCharacter)
			case(0){S_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Score",[]);}
			case(1){S_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Score",[]);}
			let F_Array=[];
			alternative(PlayerCharacter)
			case(0){F_Array=GetAreaCommonData("SPELL_RECORD","Reimu_First",[]);}
			case(1){F_Array=GetAreaCommonData("SPELL_RECORD","Marisa_First",[]);}
			let E_Array=[];
			alternative(PlayerCharacter)
			case(0){E_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Early",[]);}
			case(1){E_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Early",[]);}

			if(C_Array[GetCommonData("SpellNumber",0)]!=0)
			{
			//	ObjText_SetText(objText, "gpҁF@"~SpellCardSetting[GetCommonData("SpellNumber",0)-1][2]);
				ObjText_SetText(objText, "gpҁF@"~SpellCardSetting[selectIndex+selectPageIndex*12][2]);

			}
			else
			{
				ObjText_SetText(objText, "gpҁF@"~"Unknown");
			}
			if(F_Array[GetCommonData("SpellNumber",0)]!=0)
			{
			ObjText_SetText(objText2, "擾퐔@"~IntToString(F_Array[GetCommonData("SpellNumber",0)]));
			}
			else
			{
			ObjText_SetText(objText2, "擾퐔@"~"N/A");
			}

			if(S_Array[GetCommonData("SpellNumber",0)]!=0)
			{
			ObjText_SetText(objText3, "ōXRA@@"~IntToString(S_Array[GetCommonData("SpellNumber",0)]));
			}
			else
			{
			ObjText_SetText(objText3, "ōXRA@@"~"N/A");
			}

			if(E_Array[GetCommonData("SpellNumber",0)]!=100000)
			{
				let TimeArray=IntToString(floor(E_Array[GetCommonData("SpellNumber",0)]*100/60));
				alternative(length(TimeArray))
				case(3){TimeArray=TimeArray[0..1]~"."~TimeArray[1..3]~" s";}
				case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";}
				ObjText_SetText(objText4, "ŒZjԁ@"~TimeArray);
		//		ObjText_SetText(objText4, "ŒZjԁ@"~IntToString(E_Array[GetCommonData("SpellNumber",0)]));
			}
			else
			{
			ObjText_SetText(objText4, "ŒZjԁ@"~"N/A");
			}

			ObjText_SetText(objText5, "Page@"~IntToString(selectPageIndex+1)~" / "~IntToString(MaxselectPageIndex));

			if(PlayerCharacter==0)
			{
				ObjText_SetText(objText9, "Player@"~"@얲");
			}
			else if(PlayerCharacter==1)
			{
				ObjText_SetText(objText9, "Player@"~"J@");
			}

			ObjRender_SetX(objText10,584);
			let fpslength=5;
			if(GetCurrentFps>=100){fpslength=6;ObjRender_SetX(objText10,574);}
			ObjText_SetText(objText10,vtos("3f",GetCurrentFps)[0..fpslength]);

			let TotalGet=0;
			let TotalScore=0;
			let TotalTime=0;
			ascent(i in 0..length(SpellCardSetting))
			{
				SetSpellCardNumber(SpellCardSetting[i][0]);
				if(G_Array[GetCommonData("SpellNumber",0)]>=1)
				{
					TotalGet+=1;
				}
				if(S_Array[GetCommonData("SpellNumber",0)]>=0)
				{
					TotalScore+=S_Array[GetCommonData("SpellNumber",0)];
				}
				if(E_Array[GetCommonData("SpellNumber",0)]<100000)
				{
					TotalTime+=E_Array[GetCommonData("SpellNumber",0)];
				}
			}
			ObjText_SetText(objText6, "擾@@@"~IntToString(TotalGet)~"@/@"~IntToString(length(SpellCardSetting)));
			ObjText_SetText(objText7, "ōXRA@"~IntToString(TotalScore));
			if(TotalGet==length(SpellCardSetting))
			{
			let TimeArray=IntToString(floor(TotalTime)*100/60);
			alternative(length(TimeArray))
			case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";}
			case(5){TimeArray=TimeArray[0..3]~"."~TimeArray[3..5]~" s";}
			case(6){TimeArray=TimeArray[0..4]~"."~TimeArray[4..6]~" s";}
			case(7){TimeArray=TimeArray[0..5]~"."~TimeArray[5..7]~" s";}
			ObjText_SetText(objText8, "jԁ@@@"~TimeArray);
			}

			yield;
		}
		Obj_Delete(objText);
		Obj_Delete(objText2);
		Obj_Delete(objText3);
		Obj_Delete(objText4);
		Obj_Delete(objText5);
		Obj_Delete(objText6);
		Obj_Delete(objText7);
		Obj_Delete(objText8);
		Obj_Delete(objText9);
		Obj_Delete(objText10);
	}

	task UnderExplain
	{
		let obj = ObjText_Create();
		ObjText_SetText(obj, "Shot Decide  Pause CharacterChange  User1 Replay  Cansel_Hold Quit");
		ObjText_SetFontSize(obj, 12);
		ObjText_SetFontBold(obj, true);
//		ObjText_SetFontColorTop(obj, 128, 128, 255);
//		ObjText_SetFontColorBottom(obj, 64, 64, 255);
		ObjText_SetFontBorderType(obj, BORDER_NONE);
		ObjText_SetFontBorderColor(obj,255, 255, 255);
		ObjText_SetFontBorderWidth(obj, 0);
		Obj_SetRenderPriorityI(obj, 30);
		ObjRender_SetX(obj, 14);
		ObjRender_SetY(obj, 464);
		let Alpha=255;
		let AlphaAngle=0;
		while(!bEndTitleScene)
		{
			ObjRender_SetAlpha(obj,200+55*cos(AlphaAngle));
			AlphaAngle+=2;
			yield;
		}
		Obj_Delete(obj);
	}
}


//----------------------------------------------------
// Xe[WV[
//----------------------------------------------------
task TStageScene(let pathReplay)
{
	let dirCurrent = GetCurrentScriptDirectory();
	let dirModule = GetModuleDirectory();
	let pathMainScript = dirCurrent ~ "SpellCard/Stage.txt";
//	let pathPlayer = dirCurrent ~ "player/Marisa/Marisa.txt";
	let pathPlayer = dirCurrent ~ "player/Reimu/Reimu.txt";
	if(PlayerCharacter==0)
	{
		pathPlayer = dirCurrent ~ "player/Reimu/Reimu.txt";
	}
	else if(PlayerCharacter==1)
	{
		pathPlayer = dirCurrent ~ "player/Marisa/Marisa.txt";
	}
	//--------------------------------

	//ʑJ
	RenderSceneToTransitionTexture();
	TTransition();

	SoundFlag=0;

	//--------------------------------
	//Xe[W
	InitializeStageScene();
	if(length(pathReplay) > 0)
	{
		SetStageReplayFile(pathReplay);
	}

	//--------------------------------
	//Xe[Wݒ

	//SetCommonData("SpellCardNo",1);

	let indexStage = 1+1; //Xe[WCfbNX
	SetStageIndex(indexStage);
	SetStageMainScript(pathMainScript);
	SetStagePlayerScript(pathPlayer);
	StartStageScene();

	StageMusicFlag=1;
	TStageSound;

	//--------------------------------
	//Xe[W


	MB_Save;

	loop
	{
		if(GetVirtualKeyState(VK_SHOT) == KEY_PUSH && DemoFlag==1)
		{
			TerminateStageScene();
		}
		//--------------------------------
		//ꎞ~`FbN
		if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH && DemoFlag==0)
		{
			let resPause = RunPauseScene();
			alternative(resPause)
			case(RESULT_RETRY)
			{
				//ŏ蒼
				if(!IsReplay())
				{
					//gC

					TerminateStageScene();
					TStageScene("");
					return;
				}
			}
			case(RESULT_END)
			{
				//ꎞ~̏I
				TerminateStageScene();
			}
		}

		//--------------------------------
		//Xe[W҂
		let stgSceneState = GetStageSceneState();
		if(stgSceneState == STAGE_STATE_FINISHED)
		{
			//Xe[WIʂ擾
			let stageResult = GetStageSceneResult();
			alternative(stageResult)
			case(STAGE_RESULT_CLEARED)
			{
				//Xe[WNA
				if(indexStage == 2)
				{
						//Xe[W2NAꍇ͏I
					if(IsReplay)
					{
					TEndScene();
					}
					else
					{
					TClearScene();
					}
					break;
				}
				else
				{
					//̃Xe[W֑J
					indexStage++;
					SetStageIndex(indexStage);
					SetStageMainScript(pathMainScript); //ЂƂ܂Xe[W...
					SetStagePlayerScript(pathPlayer);
					StartStageScene();
					TTransition();
				}
			}
			case(STAGE_RESULT_PLAYER_DOWN)
			{
				//@c@0
				TEndScene();
				break;
			}
			case(STAGE_RESULT_BREAK_OFF)
			{
				//Xe[WrI
				//ꎞ~̏I
				if(IsReplay)
				{
				TEndScene();
				}
				else
				{
				TTitleScene();
				T_Sound;
				}
				break;
			}
		}
		yield;
	}	

	TTransition();
}

task TStageSound
{
	let StageMusicObject=ObjSound_Create;
	SetCommonData("MusicStep",0);
	if(GetCommonData("SpellCardID",0)<=20)
	{
	ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm1.ogg");
	}
	else if(GetCommonData("SpellCardID",0)<=41)
	{
	ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm2.ogg");
	}
	else
	{
	ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm3.ogg");
	}
	ObjSound_SetLoopEnable(StageMusicObject,true);
//	ObjSound_SetLoopTime(StageMusicObject,47.297,169.970);
	ObjSound_SetSoundDivision(StageMusicObject,SOUND_BGM);
	ObjSound_Play(StageMusicObject);
	ObjSound_SetRestartEnable(StageMusicObject,true);
	Obj_SetValue(StageMusicObject,"Stop",false);
	let CurrentVulume=1;
	while(StageMusicFlag)
	{
		if(CurrentVulume<1){CurrentVulume+=0.05;}
		if(StageMusicStopFlag)
		{
			ObjSound_Stop(StageMusicObject);
			ObjSound_SetVolumeRate(StageMusicObject,0);
			CurrentVulume=0;
		}
		else
		{
			yield;
			ObjSound_Play(StageMusicObject);
			if(GetAreaCommonData("TUNING","BGM",1)==1)
			{
				ObjSound_SetVolumeRate(StageMusicObject,100*CurrentVulume);
			}
			else
			{
				ObjSound_SetVolumeRate(StageMusicObject,0);
			}
		}
		if(GetCommonData("BossDefeat",false))
		{
			loop(240)
			{
				CurrentVulume-=1/240;
				ObjSound_SetVolumeRate(StageMusicObject,100*CurrentVulume);
				yield;
			}
			loop
			{
				yield;
				if(StageMusicFlag==0){break;}
			}
		}
		yield;
	}
/*
	CurrentVulume=1;
	while(CurrentVulume>0)
	{
		CurrentVulume-=1/240;
		if(StageMusicStopFlag)
		{
			ObjSound_Stop(StageMusicObject);
			//CurrentVulume=ObjSound_GetVolumeRate(StageMusicObject);
			ObjSound_SetVolumeRate(StageMusicObject,0);
		}
		else
		{
			yield;
			ObjSound_Play(StageMusicObject);
			if(GetAreaCommonData("TUNING","BGM",1)==1)
			{
				ObjSound_SetVolumeRate(StageMusicObject,100*CurrentVulume);
			}
			else
			{
				ObjSound_SetVolumeRate(StageMusicObject,0);
			}
		}
		yield;
	}
*/
	Obj_Delete(StageMusicObject);
}

//----------------------------------------------------
// IV[
//----------------------------------------------------
task TClearScene()
{
	if(IsReplay())
	{
		TTitleScene();
		T_Sound;
		return;
	}

	//--------------------------------
	//Xe[WI
	FinalizeStageScene();

	//--------------------------------
	//IV[XNvgN
	let dirModule = GetModuleDirectory();
//	let pathScript = dirModule ~ "script/default_system/Default_EndScene.txt";
	let pathScript = GetCurrentScriptDirectory() ~ "system/ClearScene.txt";
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//IV[ʏ

	MB_Save;

	let result = GetScriptResult(idScript);
	alternative(result)
	case(RESULT_SAVE_REPLAY)
	{
		//vCۑ
		TReplaySaveScene();
	}
	case(RESULT_END)
	{
		//ĐI
		TTitleScene();
		T_Sound;
	}
	case(RESULT_RETRY)
	{
		//gC
		TStageScene("");
	}
}

task TEndScene()
{
	if(DemoFlag==1)
	{
		SoundFlag=1;
		StageMusicFlag=0;
		T_Sound;
	//	TReplaySelectScene();
		TTitleScene();
		T_Sound;
		return;
	}
	if(IsReplay())
	{
		SoundFlag=1;
		StageMusicFlag=0;
		T_Sound;
		TReplaySelectScene();
	//	TTitleScene();
		return;
	}

	//--------------------------------
	//Xe[WI
	FinalizeStageScene();

	//--------------------------------
	//IV[XNvgN
	let dirModule = GetModuleDirectory();
//	let pathScript = dirModule ~ "script/default_system/Default_EndScene.txt";
	let pathScript = GetCurrentScriptDirectory() ~ "system/EndScene.txt";
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//IV[ʏ

	MB_Save;

	let result = GetScriptResult(idScript);
	alternative(result)
	case(RESULT_SAVE_REPLAY)
	{
		//vCۑ
		TReplaySaveScene();
	}
	case(RESULT_END)
	{
		//ĐI
		TTitleScene();
		T_Sound;
	}
	case(RESULT_RETRY)
	{
		//gC
		TStageScene("");
	}
}

//----------------------------------------------------
// ꎞ~V[
//----------------------------------------------------
function RunPauseScene()
{
	StageMusicStopFlag=1;
	RenderSceneToTransitionTexture();
	PauseStageScene(true);

	let dirModule = GetModuleDirectory();
//	let pathScript = dirModule ~ "script/default_system/Default_Pause.txt";
	let pathScript = GetCurrentScriptDirectory() ~ "system/Pause.txt";

	//--------------------------------
	//ꎞ~V[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}
	StageMusicStopFlag=0;
	PauseStageScene(false);

	let res = GetScriptResult(idScript);
	return res;
}


//----------------------------------------------------
// vCIV[
//----------------------------------------------------
task TReplaySelectScene()
{
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/ReplaySelectScene.txt";

	//--------------------------------
	//vCIV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//vCIV[ʏ
	let result = GetScriptResult(idScript);

	if(length(result) == 0)
	{
		//^CgV[֖߂
		TTitleScene();
	}
 	else
 	{
		//vCĐJn
		TStageScene(result);
	}
}


//----------------------------------------------------
// fV[
//----------------------------------------------------
task DemoScene()
{
	DemoFlag=1;
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/DemoScene.txt";

	//--------------------------------
	//vCIV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}

	//--------------------------------
	//vCIV[ʏ
	let result = GetScriptResult(idScript);

	TStageScene(result);
}

//----------------------------------------------------
// vCۑV[
//----------------------------------------------------
task TReplaySaveScene()
{
	let dirCurrent = GetCurrentScriptDirectory();
	let pathScript = dirCurrent ~ "system/ReplaySaveScene.txt";

	//--------------------------------
	//vCۑV[XNvgN
	let idScript = LoadScript(pathScript);
	StartScript(idScript);

	while(!IsCloseScript(idScript))
	{
		yield;
	}


	//--------------------------------
	//^CgV[֑J
	TTitleScene();
	T_Sound;
}


//----------------------------------------------------
// ʑJڃGtFNg
//----------------------------------------------------
function RenderSceneToTransitionTexture()
{
	//݂̃V[eʑJڗpeNX`ɕ`
	let textureName = GetTransitionRenderTargetName();
	RenderToTextureA1(textureName, 0, 100, true);
}

task TTransition
{
	let textureName = GetTransitionRenderTargetName();

	let objImage = ObjPrim_Create(OBJ_SPRITE_2D); //2DXvCgIuWFNg
	Obj_SetRenderPriorityI(objImage, 100); //`Dxݒ
	ObjPrim_SetTexture(objImage, textureName); //eNX`ݒ
	ObjSprite2D_SetSourceRect(objImage, 0, 0, 640, 480);
	ObjSprite2D_SetDestRect(objImage, 0, 0, 640, 480);

	let alpha = 255;
	while(alpha > 0)
	{
		ObjRender_SetAlpha(objImage, alpha);
		alpha -= 16;
		yield;
	}
	Obj_Delete(objImage);
}

function MB_Save
{
	if(!IsReplay())
	{
		SaveCommonDataAreaA1("SPELL_RECORD");
		SaveCommonDataAreaA1("TUNING");
	}
}